package com.ruoyi.business.service;

import java.util.List;
import java.util.Map;

import com.ruoyi.business.domain.TOrder;

/**
 * 订单管理Service接口
 * 
 * @author laoguo
 * @date 2025-08-12
 */
public interface ITOrderService 
{
    /**
     * 查询订单管理
     * 
     * @param orderId 订单管理主键
     * @return 订单管理
     */
    public TOrder selectTOrderByOrderId(Long orderId);

    /**
     * 查询订单管理列表
     * 
     * @param tOrder 订单管理
     * @return 订单管理集合
     */
    public List<TOrder> selectTOrderList(TOrder tOrder);

    /**
     * 新增订单管理
     * 
     * @param tOrder 订单管理
     * @return 结果
     */
    public int insertTOrder(TOrder tOrder);

    /**
     * 修改订单管理
     * 
     * @param tOrder 订单管理
     * @return 结果
     */
    public int updateTOrder(TOrder tOrder);

    /**
     * 批量删除订单管理
     * 
     * @param orderIds 需要删除的订单管理主键集合
     * @return 结果
     */
    public int deleteTOrderByOrderIds(Long[] orderIds);

    /**
     * 删除订单管理信息
     * 
     * @param orderId 订单管理主键
     * @return 结果
     */
    public int deleteTOrderByOrderId(Long orderId);

    /**
     * 预下单，计算订单确认页所需信息
     *
     * @param params 前端传入的参数，包含来源(from)和商品信息
     * @return 包含地址、商品、金额等信息的Map
     */
    Map<String, Object> previewOrder(Map<String, Object> params);

    /**
     * 创建订单，包含扣减库存、写入订单表等操作
     *
     * @param params 前端传入的参数，包含地址ID和商品信息
     * @return 创建成功的订单对象
     */
    TOrder createOrder(Map<String, Object> params);

    /**
     * 处理订单支付成功的业务逻辑
     * @param orderId 订单ID
     * @return 操作是否成功
     */
    boolean processPaySuccess(Long orderId);

    /**
     * 查询订单列表，并包含订单下的商品项
     * @param order 查询条件
     * @return 订单列表
     */
    List<TOrder> selectOrderListWithItems(TOrder order);

    /**
     * 根据ID查询订单详情，包含商品项
     * @param orderId 订单ID
     * @return 订单对象
     */
    TOrder selectOrderDetailById(Long orderId);

    boolean checkPartnerOrderPermission(Long partnerId, Long orderId);
    boolean checkDistributorOrderPermission(Long distributorId, Long orderId);
}
